home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Demos / A.D. Software / OOFILE 1.3b4d6.sit / OOFILE 1.3b4d6 / OOFRep demo / RepTestApp.cp < prev    next >
Text File  |  1997-05-08  |  8KB  |  278 lines

  1. // ===========================================================================
  2. //    RepTestApp.cp                Derived heavily from the Dashboard Starter
  3. // ===========================================================================
  4. //
  5.  
  6. #include "RepTestApp.h"
  7.  
  8. #include <LApplication.h>
  9. #include <LGrowZone.h>
  10. #include <LWindow.h>
  11. #include <UDrawingState.h>
  12. #include <UMemoryMgr.h>
  13. #include <URegistrar.h>
  14. #include "oofGrphs.h"
  15.  
  16. #include "oofRepPPWindow.h"
  17. #include "oofRepMacPrint.h"
  18.  
  19. #ifdef OOF_SmartHeap
  20.     #include "smrtheap.hpp"
  21. #endif
  22.  
  23. // ===========================================================================
  24. //        * Main Program
  25. // ===========================================================================
  26.  
  27. void main()
  28. {
  29.                                     // Set Debugging options
  30.     SetDebugThrow_(debugAction_Alert);
  31.     SetDebugSignal_(debugAction_Alert);
  32.  
  33.     InitializeHeap(3);                // Initialize Memory Manager
  34.                                     // Parameter is number of Master Pointer
  35.                                     //   blocks to allocate
  36.     
  37.                                     // Initialize standard Toolbox managers
  38.     UQDGlobals::InitializeToolbox(&qd);
  39.     
  40.     new LGrowZone(20000);            // Install a GrowZone function to catch
  41.                                     //    low memory situations.
  42.                                     //    Parameter is size of reserve memory
  43.                                     //    block to allocated. The first time
  44.                                     //    the GrowZone function is called,
  45.                                     //    there will be at least this much
  46.                                     //    memory left (so you'll have enough
  47.                                     //    memory to alert the user or finish
  48.                                     //    what you are doing).
  49.                                     
  50.     RepTestApp    theApp;            // Create instance of your Application
  51.     theApp.Run();                    //   class and run it
  52. }
  53.  
  54.  
  55. // ---------------------------------------------------------------------------
  56. //        * RepTestApp
  57. // ---------------------------------------------------------------------------
  58. //    Constructor
  59.  
  60. RepTestApp::RepTestApp()
  61. {
  62. }
  63.  
  64.  
  65. // ---------------------------------------------------------------------------
  66. //        * RepTestApp
  67. // ---------------------------------------------------------------------------
  68. //    Destructor
  69.  
  70. RepTestApp::~RepTestApp()
  71. {
  72. }
  73.  
  74. // ---------------------------------------------------------------------------
  75. //        Initialize
  76. // ---------------------------------------------------------------------------
  77. void
  78. RepTestApp::Initialize()
  79. {
  80.     oofRep* SimpleReport = new oofRep;
  81.     oofRep* SimpleReportWithNotes = new oofRep;
  82.     oofRep* BreakReport = new oofRep;
  83.  
  84.     PatientVisits = new dbRelationship(Patients.Visits, Visits.Patient);
  85.     
  86.     // RAM Backend
  87.     theDB.newConnection();
  88.     Patients.AddTestData();
  89.     Students.AddTestData();
  90.  
  91.     Patients.setSortOrder(Patients.LastName);
  92.     Patients.selectAll();
  93.     
  94.     Students.setSortOrder(dbSorter() << Students.Name << Students.Subject);
  95.     
  96.     dbView Sview(Students, false);
  97.     Sview << Students.Name << Students.Subject << Students.Mark;
  98.  
  99.     // OK - Let's get Powerplant to work
  100.     //    Register the functions to create our custom Pane classes
  101.     oofRepWindow::RegisterClass();
  102.  
  103.     // Do the Stuff !
  104. //****** global page footer *******    
  105.     oofRepLayoutBand* footer = new oofRepLayoutBand;
  106.     *footer
  107.         << "CLINIC" 
  108.         << oofRepTextBlock(
  109.             ostrstream() << "Printed by MANAGER on " << dbDate::today
  110.         ).align(oofRepBlock::alignRight);
  111. // if attaching to a report directly, do the following        
  112. //    SimpleReport.pageFooters() << new oofRepLineBand << footer;
  113.     oofRep::defaultSettings()->defaultPageFooters() << new oofRepLineBand << footer;
  114.     
  115.  
  116. //****** simple list  *******    
  117.     {
  118.  
  119.         oofRepLayoutBand* header = new oofRepLayoutBand;
  120.         header->textStyle("Helvetica", 18, italic);
  121.         *header << "Dr Doolot's Clinic\n" << "Patient List\n";
  122.     //    *header <<  Patients.LastName << " " << Patients.Othernames;
  123.         SimpleReport->pageHeaders() << header << new oofRepLineBand << new oofRepSpaceBand(10);
  124.  
  125.         SimpleReport->body( 
  126.             new oofRepViewBand(
  127.                 dbView(Patients, false) << Patients.LastName << Patients.Othernames,
  128.                 true //Boxed
  129.             )
  130.         );    
  131.         SimpleReport->getLocalSettings()->drawHeadingsDownToLevel(0);    // no headings on views at all
  132.         oofRepWindow::CreateWindow(this, SimpleReport);
  133.     }
  134.         
  135. //****** simple list with extra view band used to provide notes at the bottom *******    
  136.     {
  137.  
  138.         oofRepLayoutBand* header = new oofRepLayoutBand;
  139.         header->textStyle("Helvetica", 18, italic);
  140.         *header << "Dr Doolot's Clinic\n" << "Patient List\n";
  141.     //    *header <<  Patients.LastName << " " << Patients.Othernames;
  142.         SimpleReportWithNotes->pageHeaders() << header;    // no line as it looks a bit silly over a boxed report without a space
  143.         dbView    nilView;    // lacks a table, just provides a place to hang some text comments
  144.         nilView 
  145.             << "This is the first largish text comment\nwith embedded linefeed"
  146.             << "This is a second comment which should appear alongside the first comment.";
  147.         
  148.         oofRepViewBand* bodyBand = new oofRepViewBand(
  149.             dbView(Patients, false) << Patients.LastName << Patients.Othernames,
  150.             true //Boxed
  151.         );
  152.         bodyBand->footers() << new oofRepSpaceBand(20) << new oofRepViewBand(nilView);
  153.         SimpleReportWithNotes->body(bodyBand);    
  154.         
  155.         oofRepWindow::CreateWindow(this, SimpleReportWithNotes);
  156.     }
  157.         
  158. //****** simple list with graph and break after each record for 2nd list *******    
  159.     {
  160.         oofRepLayoutBand* header = new oofRepLayoutBand;
  161.         header->textStyle("Helvetica", 18, italic);
  162.         *header << "Dr Doolot's Clinic\n" << "Patient List With Details\n";
  163.         BreakReport->pageHeaders() << header << new oofRepLineBand(2);
  164.  
  165.         dbView SimplePatients(Patients, false);
  166.         SimplePatients << Patients.LastName << Patients.Othernames;
  167.         SimplePatients.colSizer()->setFixedWidth(0, 80);    // pixels
  168.         oofRepViewBand* body = new oofRepViewBand(SimplePatients);
  169.  
  170.         oofRepViewBand* body2 = new oofRepViewBand(
  171.             dbView(Patients.Visits, false) << Patients.Visits->VisitDate << Patients.Visits->Why
  172.         );
  173.         
  174.         oofRepGraphBand* graph = new oofRepGraphBand(
  175.             new oofColumnGraph(&Sview),
  176.             300,300,500, "Test Graph"
  177.         );
  178.         
  179.         body2->headers() << new oofRepSpaceBand(4);    // small gap before details
  180.         body2->footers() << new oofRepSpaceBand(32); // large gap after
  181.  
  182.         body->footerBreaks() << new oofRepBreakEveryRecord(body2);
  183.         body->footers() << graph;
  184.  
  185.         BreakReport->body(body);
  186.         
  187. /*        THPrint myTHPrint=UPrintingMgr::CreatePrintRecord();
  188.         UPrintingMgr::AskPageSetup(myTHPrint);
  189.         if(UPrintingMgr::AskPrintJob(myTHPrint)) {
  190.             BreakReport->draw(oofRepMacPrint(myTHPrint));
  191.         }
  192.         ::DisposeHandle((Handle)myTHPrint);
  193. */
  194.         oofRepWindow::CreateWindow(this, BreakReport);
  195.     }
  196. }
  197.  
  198. // ---------------------------------------------------------------------------
  199. //        * ObeyCommand
  200. // ---------------------------------------------------------------------------
  201. //    Respond to commands
  202.  
  203. Boolean
  204. RepTestApp::ObeyCommand(
  205.     CommandT    inCommand,
  206.     void        *ioParam)
  207. {
  208.     Boolean    cmdHandled = true;
  209.     
  210.     switch (inCommand) {
  211.     
  212.         default:
  213.             cmdHandled = LApplication::ObeyCommand(inCommand, ioParam);
  214.             break;
  215.     }
  216.     
  217.     return cmdHandled;
  218. }
  219.  
  220.  
  221. // ---------------------------------------------------------------------------
  222. //        * FindCommandStatus
  223. // ---------------------------------------------------------------------------
  224. //    Pass back status of a (menu) command
  225.  
  226. void
  227. RepTestApp::FindCommandStatus(
  228.     CommandT    inCommand,
  229.     Boolean        &outEnabled,
  230.     Boolean        &outUsesMark,
  231.     Char16        &outMark,
  232.     Str255        outName)
  233. {
  234.     switch (inCommand) {
  235.     
  236.         default:
  237.             LApplication::FindCommandStatus(inCommand, outEnabled, outUsesMark,
  238.                                 outMark, outName);
  239.             break;
  240.     }
  241. }
  242.  
  243. // ===========================================================================
  244. //        * Student test data
  245. // ===========================================================================
  246. void dbStudent::Add(const char *name, const char *subject, const long mark)
  247. {
  248.     newRecord();
  249.     Name = name;
  250.     Subject = subject;
  251.     Mark = mark;
  252.     saveRecord();
  253. }
  254.  
  255.  
  256. void dbStudent::AddTestData()
  257. {
  258.     Add("Alice Chan", "Maths", 62);
  259.     Add("Alice Chan", "Social Studies", 72);
  260.     Add("Alice Chan", "English", 65);
  261.     Add("Alice Chan", "Science", 82);
  262.  
  263.     Add("Kathy Robins", "Maths", 82);
  264.     Add("Kathy Robins", "Social Studies", 54);
  265.     Add("Kathy Robins", "English", 44);
  266.     Add("Kathy Robins", "Science", 75);
  267.  
  268.     Add("Brett Baker", "Maths", 65);
  269.     Add("Brett Baker", "Social Studies", 78);
  270.     Add("Brett Baker", "English", 64);
  271.     Add("Brett Baker", "Science", 72);
  272.  
  273.     Add("Jack Smith", "Maths", 71);
  274.     Add("Jack Smith", "English", 56);
  275.     Add("Jack Smith", "Science", 81);
  276.     Add("Jack Smith", "Social Studies", 35);
  277. }
  278.